package com.hainatong.jcmvvmbase.api;

import com.hainatong.jcmvvmbase.login.entity.GirlsResult;
import com.hainatong.mvvmbase.http.ApiBuildFactory;
import com.hainatong.mvvmbase.http.RetrofitHelper;
import io.reactivex.Flowable;
import io.reactivex.Observable;

import okhttp3.MultipartBody;
import retrofit2.http.*;


import java.util.List;
import java.util.Map;

public interface ApiService
{
    class Builder{
        public static ApiService getDouBanService()
        {
            return ApiBuildFactory.getInstance().create(ApiService.class, RetrofitHelper.API_DOUBAN);
        }

        public static ApiService getGankIoServer()
        {
            return ApiBuildFactory.getInstance().create(ApiService.class, RetrofitHelper.API_GANKIO);
        }

        public static SiteHelperService getSiteHelperServer()
        {
            return ApiBuildFactory.getInstance().create(SiteHelperService.class,RetrofitHelper.API_SITEHELPER);
        }
    }

    //http://sitehelper.hbhnt.net/
    String BASE_URL = "https://sitehelper.hbhnt.net/";

    /**--------------------------------------------豆瓣--------------------------------------------*/
    //请求Demo 例子
    @GET("v2/movie/in_theaters")
    Observable<ApiResult<Object>> getHotMovie();

    @GET("v2/movie/coming_soon")
    Flowable<ApiResult<Object>> getComingSoon(@Query("start") int start, @Query("count") int count);

    @GET("v2/movie/subject/{id}")
    Observable<ApiResult<Object>> getMovieDetail(@Path("id") String id);

    /**--------------------------------------------时光网--------------------------------------------*/

    @GET("showing/movies.api?locationId=561")
    Observable<ApiResult<Object>> getHotFilm();
    /**--------------------------------------------其他--------------------------------------------*/

    @GET("jingbin127/ApiServer/raw/master/update/update.json")
    Observable<ApiResult<Object>> checkUpdate();
    /**--------------------------------------------玩安卓--------------------------------------------*/

    @GET("article/list/{page}/json")
    Observable<ApiResult<Object>> getHomeList(@Path("page") int page, @Query("cid") Integer cid);

    @FormUrlEncoded
    @POST("user/login")
    Observable<ApiResult<Object>> login(@Field("username") String username, @Field("password") String password);

    @GET("lg/collect/list/{page}/json")
    Flowable<ApiResult<Object>> getCollectList(@Path("page") int page);

    @FormUrlEncoded
    @POST("lg/uncollect/{id}/json")
    Flowable<ApiResult<Object>> unCollect(@Path("id") int id, @Field("originId") int originId);

    @GET("wxarticle/chapters/json")
    Observable<ApiResult<List<Object>>> getWxarticle();

    /**--------------------------------------------干货集中营--------------------------------------------*/
    @GET("day/{year}/{month}/{day}")
    Observable<ApiResult<Object>> getGankIoDay(@Path("year") String year, @Path("month") String month, @Path("day") String day);

    /**
     * 分类数据: http://gank.io/api/data/数据类型/请求个数/第几页
     * 数据类型： 福利 | Android | iOS | 休息视频 | 拓展资源 | 前端 | all
     * 请求个数： 数字，大于0
     * 第几页：数字，大于0
     * eg: http://gank.io/api/data/Android/10/1
     * // 分类api
     * https://gank.io/api/v2/categories/<category_type>
     * https://gank.io/api/v2/categories/Article
     * // 分类数据api
     * https://gank.io/api/v2/data/category/<category>/type/<type>/page/<page>/count/<count>
     * // 旧：@GET("data/{type}/{pre_page}/{page}")
     */
    @GET("v2/data/category/{category}/type/{type}/page/{page}/count/{count}")
    Observable<GirlsResult> getGankIoData(@Path("category") String category, @Path("type") String type, @Path("page") int page, @Path("count") int count);


    /**
     * POST 请求 传过去的数据 为  json 格式
     * 需要在 请求头里 配置  {"Content-type:application/json;charset=UTF-8"}
     */
    @POST("api/PurchaseOrder/GetList")
    Observable<ApiResult<Object>> queryPurchaseOrders(@Body Map<String,String> param);

    //@Headers({"Content-type:application/json;charset=UTF-8"})
    @POST("api/PurchaseOrder/Add")
    Observable<ApiResult<Object>> addPurchaseOrder(@Body Object orderBean);

    /**
     * Json 字符串里包含 数组 可以用  Map<String,Object>  param
     */
    @POST("api/PurchaseOrder/GetList")
    Observable<ApiResult<Object>> queryPurchaseOrdersByTime(@Body Map<String,Object>  param);

    @DELETE("api/app/shopCart/{cartid}")
    Observable<Void> deleteShopCartById(@Path("cartid") int cartid );

    @GET("api/Auth/CurrentUser")
    Observable<String> getCurrentUser();

    /*
    File imgFile = new File( filePath );
    RequestBody imgBody = RequestBody.create(MediaType.parse("image/*"), imgFile);
    MultipartBody.Part  body = MultipartBody.Part.createFormData( "image",imgFile.getName() , imgBody );
    */
    /**
     * 上传图片
     * @param file
     * @return
     */
    @Multipart
    //@FormUrlEncoded  , @Field("type") String type
    @POST("api/Import/Import")
    Observable<ApiResult<Object>> upLoadImg(@Part MultipartBody.Part file  );

    //加上@GET 标签，get请求,  参数 使用@Query标签，如果参数多的话可以用@QueryMap标签，接收一个Map
    //@GET("goods/code")
    //Observable<GoodsResponse> getGoodsBycode(@QueryMap Map<String, String> params);

    /**
     * 根据商品编码 查询商品
     * @param params    <k , v> = < codeType , goodsNo 或者 Barcode > <k , v> = < goodsCode , 商品编号 >
     * @return
     */
    //@GET("goods/code")
    //Observable<HttpResponse<String>> getGoodsBycode(@QueryMap Map<String, String> params);

    /**
     * 根据类别编号 查询分页商品
     * @param typeNo
     * @param page
     * @param sortByStock  = "1"   安库存量排序  少的拍前面   /  其它 不排序
     * @return
     */
    //@GET("goods/type")
    //Observable<HttpResponse<List<PGoodsEntity>>> getGoodsByTypeNo(@Query("typeNo") String typeNo , @Query("page") int page , @Query("sortByStock") String sortByStock);

    //POST请求，用@POST 标签，
    // 参数标签用 @Field 或者@Body或者FieldMap，
    // 注意：POST 注意2点，1，必须加上 @FormUrlEncoded标签，否则会抛异常
    // 2，使用POST方式时，必须要有参数

    /**
     * 删除商品信息
     * @param goodsNo
     * @return
     */
    //@FormUrlEncoded
    //@POST("goods/delete")
    //Observable<HttpResponse<String>> deleteGoods(@Field("goodsNo") String goodsNo  );

    /*************待修改****************************************************************/

    /**
     * 添加 商品货架信息
     * @param shelfInfo
     * @return
     */
    //@POST("goods/location/group/add")
    //Observable<HttpResponse<String>> addGoodsShelfs(@Body PShelfInfo shelfInfo);

    /**
     * 给指定货架上添加 商品
     * @param orgNo
     * @param cashierNo
     * @param locationNo
     * @param locGoodsList
     * @return
     */
    //@FormUrlEncoded
    //POST("goods/location/group/bind")
    //Observable<HttpResponse<String>> addShelfGoods(@Field("orgNo") String orgNo , @Field("cashierNo") String cashierNo ,
    //@Field("locationNo") String locationNo , @Body List<LocGoods> locGoodsList);

    /*************待修改****************************************************************/

}
